<template>
  <div>
    <h1>当前求和为:{{sum }}</h1>
    <h1>当前求和放大十倍后的值是:{{ bigSum }}</h1>
    <h2>我在：{{  school }}，学习：{{  subject }}</h2>

    <h3>获取到persons列表中的人数为：{{ persons.length }}</h3>
    <!--让其收集到的数据全是number类型的 number修饰符-->
    <select v-model.number="n">
      <!--让所有的value全部绑定为数字-->
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
    </select>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
    <button @click="incrementOdd">当前求和为奇数再加</button>
    <button @click="incrementWait">等一等再加</button>
    <button @click="chainfilter">测试链式action调用</button>

   
  </div>
</template>

<script>
import { mapState,mapGetters,mapActions,mapMutations } from 'vuex'
export default {
  //计数组件
  name: "Count2",
  data(){
    return {
      n: 1 // 代表用户在select框开始的时候选择的数字 用户选择的数据和该值进行双向的绑定
    }
  },
  methods:{
    // increment(){
    //   //this.sum += this.n;
    //   this.$store.dispatch('countAbout/increment',this.n)
    // },
    // decrement(){
    //   this.$store.dispatch('countAbout/decrement',this.n)
    // },
    // //判断state的状态值为奇数时在加
    // incrementOdd(){
    //   //this.sum = this.sum % 2 !== 0 ? this.sum + this.n :  this.sum;
    //   this.$store.dispatch('countAbout/incrementOdd',this.n)
    // },
    // incrementWait(){
    //   //setTimeout(() => this.sum += this.n,2000)
    //   this.$store.dispatch('countAbout/incrementWait',this.n)
    // },
    // chainfilter(){
    //   this.$store.dispatch('countAbout/chainfilter',this.n)
     // 对methods中的方法进行简化
     ... mapActions('countAbout',['increment','decrement','incrementOdd','incrementWait','chainfilter']),
     ... mapMutations('countAbout',['INCREMENT','DECREMENT']),
     ... mapMutations('personAbout',['addPerson'])
    // }
  },
  computed:{
    //1. 使用computed方法 简化从 $store.state中取值
    // sum:{
    //   get(){
    //     return this.$store.state.sum
    //   } 
    // },
    // school:{
    //   get(){
    //     return this.$store.state.school
    //   } 
    // },
    // subject:{
    //   get(){
    //     return this.$store.state.subject
    //   } 
    // }
    //2. 使用mapState 简化计算属性写法 对象写法
    //... mapState ({'sum':'sum','school':'school','subject':'subject'})
    //3. 使用mapState 简化计算属性写法 对象简写写法
    ... mapState ('countAbout',{sum:'sum',school:'school',subject:'subject'}),
    //3. 使用mapState 数组写法 需要保证计算属性的属性名和state属性的属性名称一致
    //... mapState (['sum','school','subject']),
    ... mapGetters ('countAbout',{bigSum:'bigSum'}),
    ... mapState ('personAbout',{persons:'persons'}),
   

  },
  //2. 使用mapState 简化计算属性写法取值
  mounted(){
    //组件挂载完成输出store对象
    console.log(this.$store);
  }
}
</script>

<style scoped>
   button{
     margin-left: 5px;
   }
</style>
